package storage;

public class TypeConverter {
	/***** DATA *****/
    /*
     * Tipi di dato in java
     */
	private String Java[] = null;
        /**
         * tipi di dato NTT
         */
	private String NTT[] = null;
        /**
         * Tipi di dato nel database
         */
	private String Database[] = null;

	/************************************************************************/

	/***** CONSTRUCTOR *****/
        /**
         * Costruttore della classe TypeConverter
         */
	public TypeConverter() {
		Java = new String[6];
		Java[0] = "String";
		Java[1] = "Integer";
		Java[2] = "Float";
		Java[3] = "String";
		Java[4] = "String";
		Java[5] = "String";

		NTT = new String[6];
		NTT[0] = "String";
		NTT[1] = "Number";
		NTT[2] = "Decimal";
		NTT[3] = "Password";
		NTT[4] = "Table";
		NTT[5] = "List";

		Database = new String[6];
		Database[0] = "text";
		Database[1] = "Integer";
		Database[2] = "Real";
		Database[3] = "text";
		Database[4] = "text";
		Database[5] = "text";
	}

	
        /**
         * Questo metodo passate tre stringhe ritorna il tipo compatibile
         * @param typeToconvertInType2 Tipo ddi destinazione
         * @param type1 Tipo uno
         * @param type2 Tipo due
         * @return Tipo convertito
         * @throws Exception conversione non riuscita tipo sconosciuto
         */
	private String Converter(String typeToconvertInType2, String type1[],
			String type2[]) throws Exception {
		int len = type2.length;
		String ret = null;
		
		typeToconvertInType2=typeToconvertInType2.split(":")[0];
		typeToconvertInType2=typeToconvertInType2.trim();
		for (int i = 0; i < len; i++) {
			if (typeToconvertInType2.equals(type1[i])) {
				if (ret == null) {
					ret = type2[i];
				} else {
					ret = ret + "," + type2[i];
				}
			}
		}
		if (ret == null) {
			throw new Exception("Error-TypeConverter-Converter-TypeNotFound");
		}
		return ret;
	}

	/**
	 * Questo metodo preso in input un tipo di java, restituisce il tipo
	 * equivalente per NTT
	 * 
	 * @param type
	 *            Tipo di dato di Java
	 * @return Tipo di dato di NTT
	 * @exception Tipo
	 *                di dato non convertibile
	 */
	protected String[] JavaToNTT(String type) throws Exception {
		return this.Converter(type, this.Java, this.NTT).split(",");
	}

	/**
	 * Questo metodo preso in input un tipo di NTT, restituisce il tipo
	 * equivalente per JAVA
	 * 
	 * @param type
	 *            Tipo di dato di NTT
	 * @return Tipo di dato di Java
	 * @exception Tipo
	 *                di dato non convertibile
	 */
	protected String NTTToJAVA(String type) throws Exception {
		return this.Converter(type, this.NTT, this.Java);
	}

	/**
	 * Questo metodo preso in input un tipo di java, restituisce il tipo
	 * equivalente per il Database
	 * 
	 * @param type
	 *            Tipo di dato di Java
	 * @return Tipo di dato del Database
	 * @exception Tipo
	 *                di dato non convertibile
	 */
	protected String JavaToDatabase(String type) throws Exception {
		return this.Converter(type, this.Java, this.Database);
	}

	/**
	 * Questo metodo preso in input un tipo del database, restituisce il tipo
	 * equivalente per Java
	 * 
	 * @param type
	 *            Tipo di dato del Databse
	 * @return Tipo di dato di Java
	 * @exception Tipo
	 *                di dato non convertibile
	 */
	protected String DatabaseToJava(String type) throws Exception {
		return this.Converter(type, this.Database, this.Java);
	}

	/**
	 * Questo metodo preso in input un tipo di NTT, restituisce il tipo
	 * equivalente per il Databse
	 * 
	 * @param type
	 *            Tipo di dato di NTT
	 * @return Tipo di dato del Database
	 * @exception Tipo
	 *                di dato non convertibile
	 */
	protected String NTTToDatabase(String type) throws Exception {
		return this.Converter(type, this.NTT, this.Database);
	}

	/**
	 * Questo metodo preso in input un tipo del Database, restituisce il tipo
	 * equivalente per NTT
	 * 
	 * @param type
	 *            Tipo di dato del Database
	 * @return Tipo di dato di NTT
	 * @exception Tipo
	 *                di dato non convertibile
	 */
	protected String[] DatabaseToNTT(String type) throws Exception {
		return this.Converter(type, this.Database, this.NTT).split(",");
	}
}
